//4、 说走就走的旅行
#include<stdio.h>
#include<string.h>
int main()
{
	double D1, C, D2, P;
	double max,s=0,cost=0,remain=0;
	int N,i,j;
	scanf("%lf%lf%lf%lf%d", &D1,&C,&D2,&P,&N);
	double way[100];//加油站距起点位置
	double value[100];//油价
	
	value[0] = P;
	way[0] = 0;
	way[N + 1] = D1;//终点
	value[N + 1] = 0;
	max = C * D2;
	for (i = 1; i <= N; i++)
	{
		scanf("%lf%lf", &way[i], &value[i]);
		if ((way[i] - way[i - 1])>max)
		{
			printf("No Solution");
			return 0;
		}
	}
	//最后一个加油站到终点的判断 
	if ((way[N + 1] - way[N]) > max)//距离太远，车加满油都跑不到
	{
		printf("No Solution");
		return 0;
	}
	for (i = 0,j=0; i <= N; i=j)
	{
		for (j = i + 1; j <= N + 1; j++)//寻找下一个可到达的更便宜的加油站j
		{
			if ((way[j] - way[i]) <= max && value[j] <= value[i])
			{
				cost += ((way[j] - way[i]) / D2 - remain) * value[i];//累加邮费
				remain = 0;
				break;
			}
			else if ((way[j] - way[i]) >max)//如果超出距离还没找到，则到可以到达的最远加油站j--；
			{
				j--;
				cost += (C - remain) * value[i];
				remain = C - (way[j] - way[i]) / D2;
				break;
			}
		}
	}
	printf("%.2lf", cost);
	return 0;
}

